//#include <iostream>
//#include <bitset>
//
//#include "bit_manip.hpp"
//
//
//using namespace std;
//
//
//template <typename Array, size_t Size>
//std::bitset<Size * CHAR_BIT> array_to_bitset( const Array (&array)[Size] )
//{
//	const int total_bits = Size * CHAR_BIT;
//
//	std::bitset<total_bits> temp;
//
//	for (int i = 0; i < total_bits; ++i)
//	{
//		temp[i] = get_bit_value(array, i);
//	}
//
//	return temp;
//}
//
//
//
//int main()
//{
//	const unsigned char key[] = { 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1 };
//	//std::cout << sizeof(key) << std::endl;
//
//	std::bitset<64> xxx = array_to_bitset(key);
//	cout << xxx << endl;
//	xxx <<= 2;
//	cout << xxx << endl;
//
//
//	bitset<16> bitsetObject(32);
//	bitset<27> bitsetObject_2(32);
//	bitset<32> bitsetObject_3(32);
//
//	cout << "Bits:" << std::endl;
//	cout << bitsetObject << endl;
//	cout << bitsetObject_2 << endl;
//	cout << bitsetObject_3 << endl;
//
//	bitsetObject[0] = 1;
//	bitsetObject[2] = 0;
//	bitsetObject[10] = 1;
//	bitsetObject[12] = 1;
//
//	cout << "Bits:";
//	cout << bitsetObject;
//	cout << endl;
//
//
//	bitsetObject <<= 2;   // rotate bits
//	cout << "Bits rotate: ";
//	cout << bitsetObject;
//	cout << endl;
//
//
//	bitsetObject.flip(); // flip bits
//	cout << "After flipping bits:    ";
//	cout << bitsetObject;
//	cout << endl;
//
//	if(bitsetObject.any()) 
//		cout << "bitsetObject has at least 1 bit set.\n";
//
//	cout << "bitsetObject has " << bitsetObject.count();
//	cout << " bits set.\n";
//
//	// test bits different three ways
//	if(bitsetObject[0] == 1)
//		cout << "bit 0 is on\n";
//	if(bitsetObject.test(1))
//		cout << "bit 1 is on\n";
//
//	cout << "Add 11 to bit 0: " << bitsetObject[0] + 11 << endl;   // can add bits to integers
//
//	return 0;
//}